package com.genius.mapper;

import com.genius.system.dto.NoticeUserDTO;
import com.genius.system.pojo.NoticeUser;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface NoticeUserMapper {
    /**
     * 查询消息用户关联数据
     * @param noticeUser 查询条件
     * @return 消息用户关联数据
     */
    List<NoticeUserDTO> selectNoticeUserByPage(NoticeUser noticeUser);

    /**
     * 根据用户ID查询用户未读消息数量
     * @param userId 用户ID
     */
    int selectNoticeCountByUserId(Long userId);

    /**
     * 查询对应消息是否已经发送对应用户
     * @return 是否发送
     */
    boolean selectNoticeUserIsExist(NoticeUser noticeUser);

    /**
     * 查询对应消息是否已经发送
     * @param ids 消息ID
     * @return 删除行数
     */
     boolean selectNoticeUserIsExistByNoticeId(Long[] ids);

    /**
     * 消息用户关联
     *
     * @param noticeUserList 消息用户关系
     */
    int insertNoticeUser(List<NoticeUser> noticeUserList);

    /**
     * 删除消息用户
     * @param ids 消息用户ID
     * @return 删除行数
     */
    int deleteNoticeUserByIds(Long[] ids);

    /**
     * 判断消息是否可撤回
     * @param ids 消息用户ID
     * @return 是否可撤回，true是，false否
     */
    boolean noticeCanRevokeOrNot(Long[] ids);

    /**
     * 判断消息是否可阅
     * @param noticeUser 消息用户
     * @return 是否可阅，true是，false否
     */
    boolean noticeCanReadOrNot(NoticeUser noticeUser);

    /**
     * 消息用户撤回
     * @param ids 消息用户ID
     * @return 修改行数
     */
    int revokeNoticeUserByIds(Long[] ids);

    /**
     * 已阅消息
     * @param ids 消息用户ID
     * @return 修改行数
     */
    int readNoticeUserByIds(Long[] ids);
}